implemening an algorithm